Contemporary data processing systems often include a combination of software executing on one or more general purpose processors cooperating with dedicated hardware (e.g., accelerator engines) that provide offload from the software for specific system functionalities. Such systems are characterized by numerous data exchanges between the cooperating hardware and software entities.
A problem with such data processing systems is the inability to effectively identify (debug) what causes a failure in such systems. Moreover, when the data processing system is integrated on a silicon chip, providing sufficient system observability to enable the debugging of software and/or hardware errors during runtime can be very complex and costly. Such a problem is compounded when the data processing system to be debugged includes a number of independently operating hardware and software entities that are able to communicate with one another and perform tasks in an interactive way such that some parts of a task are performed by one entity, while other parts of the task are performed by one or more other entities.
The root cause of a failure in such systems at a given point in time often results from an error in the data exchanged between the cooperating hardware and software entities at arbitrary points leading back in time. Thus, there is a desire in the art to provide a data records methodology and apparatus for debugging of such hardware and software failures.
Contemporary debugging techniques merely provide capabilities focused on either an isolated software debug or an isolated hardware debug. In particular, contemporary software debugging does not facilitate debugging of hardware, while contemporary hardware debugging does not facilitate software debugging. Generally, hardware and software debugging are performed separately, in isolation from each other. Consequently, contemporary debugging techniques do not provide any specific schema or mechanism for debugging of failures occurring in a complex hardware and software partitioned system in which the hardware and software entities cooperatively work to achieve system level functionality. Additionally, there is no data records schema available to effectively trace system failures to erroneous data exchanges between specific hardware and/or software entities.